#pragma once
#include <stdio.h>
#include <string.h> // c string
#include <signal.h> // signal()
#include <stdlib.h> // exit()
#include <unistd.h> // 对于 POSIX 系统调用，如 open, close 等
#include <pthread.h>
#include <dirent.h>
#include <fcntl.h> // 设备符操作

#include <string>
#include <iostream>
#include <sstream>
#include <vector>
#include <map>
#include <unordered_map>
#include <future>

#include <sys/ioctl.h> // ioctl函数

#include "zmq.h"
#include "zmq.hpp"
#include "zmq_addon.hpp"
#include "Common.hpp"
#include "LogStream.hpp"
#include "Timer.hpp"
#include "Settings.hpp"

// using namespace std; // 不建议用此行展开std所有函数，容易造成后续代码冲突
// 建议用如下特定函数展开的方式
using std::cout;
using std::endl;
using std::vector;
using std::string;
using std::stringstream;
using std::tuple;
using std::map;
using std::unordered_map;
#define umap unordered_map
using std::make_tuple;
using std::make_shared;
using std::make_unique;
using std::to_string;

#include "json.hpp"
using nlohmann::json;

#define ZMQ_LINK_URL "tcp://localhost:50001"
#define ZMQ_US_MSG_URL "tcp://localhost:50002" // 串口同步消息
#define ZMQ_CAM_OUT_URL "tcp://localhost:50003"
#define ZMQ_TOPIC_US_TX "uart_tx" // 串口主题